package com.dxf.chepter03

import com.dxf.chepter03.T35_递归

/**
 *
 * 递归:
 * 1 程序执行一个函数,就是创建一个新的受保护的独立空间(新栈)
 * 2 函数的局部变量时独立的,不会互相影响
 * 3 递归必须向退出条件逼近,否则就是无限递归
 * 4 当一个函数执行完毕,或者遇到return ,就会返回,遵守谁调用,就将结果返回给谁
 *
 */
object T35_递归 {
  def main(args: Array[String]): Unit = {

    // test(4)

    println(t01(6))
    println(t02(2))
    println(t03(1))

  }

  def test(n: Int) {
    if (n > 2) {
      test(n - 1)
    }
    println(n)

  }

  //斐波那契数
  def t01(n: Int): Int = {
    // 1,1,2,3,5,8,13
    //给一个整数n,求它的斐波那契数是多少
    if (n <= 2) {
      return 1
    } else {
      return t01(n - 1) + t01(n - 2)
    }


  }

  //求函数值
  def t02(n: Int): Int = {
    // f(1)=3 ; f(n) = 2f(n-1)+1
    if (n == 1) return 3
    else {
      return 2 * t02(n - 1) + 1
    }
  }


  //求猴子吃桃子
  //猴子第一天吃其中的一半并在多吃一个
  def t03(n: Int): Int = {

    if (n == 10) {
      return 1
    } else {
      return 2*(t03(n+1)+1)
    }
  }


}
